#ifndef __STACK_H
#define __STACK_H

#define STACK_DEPTH 1024
#define incStackPtr(i) (((i)+1))
#define decStackPtr(i) (((i)-1))

typedef struct StackElement_S
{
  void * element;
} StackElement_T;
typedef StackElement_T * StackElement;

typedef struct Stack_S
{
  volatile int top;
  unsigned int num;
  StackElement_T stack[STACK_DEPTH];
} Stack_T;
typedef Stack_T * Stack;

Stack newStack(void);
void delStack(Stack s);
int isStackEmpty(Stack s);
void push(Stack s, StackElement e);
void pop(Stack s, StackElement e);
#endif
